<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <img src="../../cssSpirit.jpeg" title="content" alt="background">
  <script lang="javascript">
    //promise和async/await都是解决异步编程的方案，但是async/await使得异步代码看起来像同步代码

    // 你可以把 Promise 理解成一个 容器，里面装着将来才会结束的一个事件的结果，这个事件通常是一个异步操作。


    // async/await可以让代码简洁很多，不需要像promise一样then，不需要写匿名函数处理promise的resolve的值，也不需要定义多余的data变量，
    // 还避免了嵌套代码。

    // async函数一定会返回一个promise对象。如果一个async函数的返回值看起来不是promise，那么它将会被隐式地包装在一个promise中。
    // 这个promise要么通过一个由async函数返回的值被解决，要么通过async函数抛出的（或者没有被捕捉到的）异常给拒绝
    // await的作用就是获取Promise中返回的内容，即promise.[[promiseValue]]
    // await必须写在async中
    
    // async function foo(p){
    //   console.log('foo run',p);
    //   return 1;
    // }
    // var res = foo(3);//foo run 3
    // console.log(res);//Promise {<fulfilled>: 1}
    // console.log('================================================================================================')

    // // 上面的函数等价于
    // function fuu(p){
    //   console.log('fuu run',p);
    //   return Promise.resolve(1);
    // }
    // var res1 = fuu(4)
    // console.log(res1);
    // console.log('================================================================================================')


    // function testAsy(x){
    //   return new Promise(resolve=>{
    //     setTimeout(() => {
    //       resolve(x)
    //     }, 1000);
    //   })
    // }
    // async function testAwt(){
    //   let result = await testAsy('hello world');
    //   console.log(result);
    // }
    // testAwt();
  </script>
</body>
</html>
